package com.ztrue.framework.core.command;

import com.ztrue.framework.infrastructure.IClone;
import com.ztrue.framework.infrastructure.IDistribute;

/**
 * 表示一个disruptor中用于传递命令消息的事件
 *
 * @author zhangw
 * @date 2016/11/5 17:25
 * @version: 1.0
 */
public class CommandMessage implements IClone<CommandMessage>, IDistribute {
    /**
     * 命令消息
     */
    private ICommand message;

    /**
     * 初始化一个默认的命令消息
     */
    public CommandMessage() {
    }

    /**
     * 初始化一个命令消息
     *
     * @param command 命令对象
     */
    public CommandMessage(ICommand command) {
        this.message = command;
    }

    /**
     * 获取命令消息
     *
     * @return
     */
    public ICommand getMessage() {
        return message;
    }

    /**
     * 设置命令消息
     *
     * @param message
     */
    public void setMessage(ICommand message) {
        this.message = message;
    }

    /**
     * 获取命令类型
     *
     * @return
     */
    public Class getCommandClass() {
        return this.message.getClass();
    }

    /**
     * 克隆
     *
     * @param commandMessage
     */
    @Override
    public void clone(CommandMessage commandMessage) {
        this.message = commandMessage.getMessage();
    }

    /**
     * 获取路由密匙
     *
     * @return
     */
    @Override
    public String getRoutingKey() {
        return this.message.getRoutingKey();
    }
}
